package com.ruyuan.eshop.construction.repository;

import com.ruyuan.eshop.common.exception.CommonErrorCodeEnum;
import com.ruyuan.eshop.common.exception.ProductBizException;
import com.ruyuan.eshop.construction.converter.AttributeConverter;
import com.ruyuan.eshop.construction.domain.dto.AttributeDetailDTO;
import com.ruyuan.eshop.construction.domain.entity.AttributeKeyDO;
import com.ruyuan.eshop.construction.domain.entity.AttributeValueDO;
import com.ruyuan.eshop.construction.domain.request.AttributeRequest;
import com.ruyuan.eshop.construction.domain.request.QueryAttributeRequest;
import com.ruyuan.eshop.construction.mapper.AttributeKeyMapper;
import com.ruyuan.eshop.construction.mapper.AttributeValueMapper;
import org.springframework.stereotype.Repository;

import javax.annotation.Resource;
import java.util.Date;
import java.util.List;

/**
 *  商品审核 资源管理
 * @author : zhonghuashishan
 *
 */
@Repository
public class AttributeRepository {

    @Resource
    private AttributeKeyMapper attributeKeyMapper;

    @Resource
    private AttributeValueMapper attributeValueMapper;

    @Resource
    private AttributeConverter attributeConverter;

    public void saveAttribute(AttributeRequest attributeRequest) {
        // 保存规格key信息
        saveAttributeKey(attributeRequest);
        // 保存规格值信息
        saveAttributeValue(attributeRequest);
    }

    public void updateAttribute(AttributeRequest attributeRequest) {
        // 修改规格key信息
        updateAttributeKey(attributeRequest);
        // 修改规格值信息
        updateAttributeValue(attributeRequest);
    }

    private void saveAttributeKey(AttributeRequest attributeRequest) {
        // 对象转换
        AttributeKeyDO attributeKeyDO =
                attributeConverter.converterKeyDO(attributeRequest.getAttributeKeyRequest(),
                        attributeRequest.getOperateUser());
        attributeKeyDO.initCommon();

        // 保存
        int count = attributeKeyMapper.insert(attributeKeyDO);
        if (count <= 0){
            throw new ProductBizException(CommonErrorCodeEnum.SQL_ERROR);
        }
    }

    private void saveAttributeValue(AttributeRequest attributeRequest) {
        // 对象转换
        List<AttributeValueDO> attributeValueDOS =
                attributeConverter.converterValueDOList(attributeRequest.getAttributeValueRequests());

        if (attributeValueDOS.isEmpty()) {
            return;
        }

        // value对象字段初始化
        for (AttributeValueDO attributeValueDO : attributeValueDOS) {
            attributeValueDO.setUpdateUser(attributeRequest.getOperateUser());
            // 初始化部分信息
            attributeValueDO.initCommon();
        }

        // 批量入库
        int count = attributeValueMapper.insertBatch(attributeValueDOS);
        if (count <= 0){
            throw new ProductBizException(CommonErrorCodeEnum.SQL_ERROR);
        }
    }

    private void updateAttributeKey(AttributeRequest attributeRequest) {
        // 对象转换
        AttributeKeyDO attributeKeyDO =
                attributeConverter.converterKeyDO(attributeRequest.getAttributeKeyRequest(),
                        attributeRequest.getOperateUser());

        // 修改
        int count = attributeKeyMapper.updateById(attributeKeyDO);
        if (count <= 0){
            throw new ProductBizException(CommonErrorCodeEnum.SQL_ERROR);
        }
    }

    private void updateAttributeValue(AttributeRequest attributeRequest) {
        // 对象转换
        List<AttributeValueDO> attributeValueDOS =
                attributeConverter.converterValueDOList(attributeRequest.getAttributeValueRequests());

        if (attributeValueDOS.isEmpty()) {
            return;
        }

        // 修改规格值信息
        for (AttributeValueDO attributeValueDO : attributeValueDOS) {
            attributeValueDO.setUpdateUser(attributeRequest.getOperateUser());
            attributeValueMapper.updateById(attributeValueDO);
        }
    }

    public List<AttributeDetailDTO> getAttributeDetail(QueryAttributeRequest queryAttributeRequest) {
        return attributeKeyMapper.getAttributeDetail(queryAttributeRequest);
    }
}
